Skip to content

feat: Add 6 new OpenRouter models (April 2026 refresh)#430

Open
timeleft-- wants to merge 14 commits intoBeehiveInnovations:mainfrom
MachineWisdomAI:feat/update-openrouter-models-2026-04
Open

feat: Add 6 new OpenRouter models (April 2026 refresh)#430
timeleft-- wants to merge 14 commits intoBeehiveInnovations:mainfrom
MachineWisdomAI:feat/update-openrouter-models-2026-04

Conversation

@timeleft--
Copy link
Copy Markdown

Summary

  • Add Nous Research Hermes 4 (405B & 70B) — hybrid reasoning models with deliberative alignment, function calling, and structured output
  • Add Qwen 3.6 Plus — Alibaba's latest frontier model with 1M context and agentic coding
  • Add MiniMax M2.7 — 1T parameter model matching GPT-5.3-Codex on SWE-Pro
  • Add Qwen3 Coder 480B — frontier open-weight coding model (35B active MoE)
  • Add Google Gemini 3.1 Flash Lite Preview — cost-efficient flash variant with thinking support
  • Migrate qwen alias from Qwen 3.5 → Qwen 3.6 Plus, minimax alias from M2.5 → M2.7

Total models: 35 → 41.

Test plan

  • JSON parses cleanly
  • Registry loads all 41 models with no alias conflicts
  • Unit tests pass (python -m pytest tests/ -v -m "not integration")
  • OpenRouter model simulator test (python communication_simulator_test.py --individual openrouter_models)

🤖 Generated with Claude Code

timeleft-- and others added 13 commits March 6, 2026 07:29
New models: Claude Opus 4.6, Claude Sonnet 4.6, Gemini 3.1 Pro,
GPT-5.4 Pro, GPT-5.3 Codex, DeepSeek V3.2, Devstral 2512,
Qwen 3.5 397B, MiniMax M2.5.

Removed: meta-llama/llama-3-70b (8K context, obsolete),
perplexity/llama-3-sonar-large-32k-online (legacy).

Generic aliases (opus, sonnet, pro, gpt5pro) migrated to newest
model versions. Version-specific aliases preserved for backward
compatibility (opus4.5, sonnet4.5, gemini3.0, gpt5.2-pro).

Version bumped to 9.9.0. All 870 tests pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Keep version 9.9.0 from our feature branch (upstream synced to 9.8.2).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- gpt-5.3-codex: supports_temperature true→false (contradicts fixed constraint)
- minimax-m2.5: max_output_tokens 196608→32768 (practical default; API allows up to 196K)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
10 files were failing the black --check CI step before this PR.
None are files modified by this PR — fixing them here to unblock CI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add openai/gpt-5.4 with aliases gpt5, gpt5.4, gpt-5.4
- Move gpt5 alias from openai/gpt-5 to openai/gpt-5.4 (newest base)
- Keep gpt-5.0/gpt5.0 on old openai/gpt-5 for backward compat
- Update tests and docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- codex → openai/gpt-5.3-codex (was gpt-5-codex)
- Old gpt-5-codex keeps codex-5.0 for backward compat

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Claude Desktop has a ~4 minute hardcoded MCP tool call timeout. When Pal
routes to slow models (e.g. high-reasoning models), API calls can take
4-8 minutes and get cancelled before the response arrives.

This wraps tool.execute() calls with periodic MCP progress notifications
(every 15s) that keep the connection alive. Uses the standard MCP
progressToken mechanism — no changes needed to individual tools or
providers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Address code review feedback from GPT 5.3 Codex:
- Use `is None` instead of truthiness check for progress_token (0 is valid)
- Wrap entire while loop in try/except CancelledError so cancellation
  during send_progress_notification also cleans up the task
- Await the cancelled task to prevent orphaned coroutines
- Log first notification failure instead of silently swallowing all

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Claude Desktop never sends a progressToken in MCP tool call requests,
so progress notifications were never firing. Use request_id (always
available) as fallback token. The notification still keeps the stdio
transport alive and prevents the ~4 min timeout.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
During cancellation teardown, the inner task could raise a non-CancelledError
exception (e.g. ValueError from model execution) which would mask the outer
CancelledError. Catch Exception instead to ensure cancellation always
propagates correctly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add Hermes 4 (405B, 70B), Qwen 3.6 Plus, MiniMax M2.7, Qwen3 Coder,
and Gemini 3.1 Flash Lite. Migrate primary aliases (qwen, minimax) to
latest model versions. Total models: 35 → 41.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the server to version 9.9.0 and increases the minimum Python requirement to 3.10. The changes include a major update to the OpenRouter model registry, adding several new frontier models (such as Claude 4.6, Gemini 3.1, and GPT-5.4) and migrating generic aliases to point to these latest versions. Additionally, a new progress notification mechanism was implemented in server.py to prevent client timeouts during long-running tool executions. Review feedback identifies a typo in the minimax-m2.7 model name and points out that some tests and documentation still reference older model versions for the qwen and minimax aliases.

Comment thread tests/test_openrouter_registry.py Outdated
Comment on lines +113 to +114
("qwen", "qwen/qwen3.5-397b-a17b"),
("minimax", "minimax/minimax-m2.5"),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

These test cases for qwen and minimax aliases seem to be asserting the old mappings. According to the changes in openrouter_models.json and the PR description, these aliases should point to the newer model versions.

  • qwen should resolve to qwen/qwen3.6-plus.
  • minimax should resolve to minimax/minimax-m2.7.

Please update these assertions to reflect the alias migrations. Note that this suggestion assumes the model_name for minimax-m2.7 is corrected to use a dot instead of a dash, as suggested in another comment.

Suggested change
("qwen", "qwen/qwen3.5-397b-a17b"),
("minimax", "minimax/minimax-m2.5"),
("qwen", "qwen/qwen3.6-plus"),
("minimax", "minimax/minimax-m2.7"),

Comment thread conf/openrouter_models.json Outdated
"intelligence_score": 17
},
{
"model_name": "minimax/minimax-m2-7",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

There appears to be a typo in the model_name. Based on the aliases (minimax-m2.7, m2.7) and the description, it should likely be minimax/minimax-m2.7 with a dot instead of a dash.

Suggested change
"model_name": "minimax/minimax-m2-7",
"model_name": "minimax/minimax-m2.7",

Comment thread docs/custom_models.md Outdated
Comment on lines +70 to +71
| `qwen`, `qwen3.5` | `qwen/qwen3.5-397b-a17b` | Frontier 397B MoE reasoning model (262K context) |
| `minimax`, `m2.5` | `minimax/minimax-m2.5` | SWE-Bench 80.2%, agent-optimized (197K context) |
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The documentation for the qwen and minimax aliases seems to be out of sync with the changes in openrouter_models.json.

  • The qwen alias now points to qwen/qwen3.6-plus, but the table here lists it with qwen/qwen3.5-397b-a17b.
  • The minimax alias now points to minimax/minimax-m2.7, but the table lists it with minimax/minimax-m2.5.

The PR description mentions these migrations, so the documentation should be updated to reflect the new state.

Suggested change
| `qwen`, `qwen3.5` | `qwen/qwen3.5-397b-a17b` | Frontier 397B MoE reasoning model (262K context) |
| `minimax`, `m2.5` | `minimax/minimax-m2.5` | SWE-Bench 80.2%, agent-optimized (197K context) |
| `qwen` | `qwen/qwen3.6-plus` | Alibaba's latest frontier model (1M context). `qwen3.5` -> 3.5 |
| `minimax` | `minimax/minimax-m2.7` | 1T param model matching GPT-5.3-Codex. `m2.5` -> 2.5 |

- Fix minimax-m2-7 typo → minimax-m2.7 (dot not dash, consistent with m2.5)
- Update test assertions for migrated qwen/minimax aliases
- Update docs alias table with new model mappings and new models

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 06127ed2ce

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread tests/test_openrouter_registry.py Outdated
Comment on lines +113 to +114
("qwen", "qwen/qwen3.5-397b-a17b"),
("minimax", "minimax/minimax-m2.5"),
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Align alias-resolution test with migrated qwen/minimax defaults

These assertions still expect qwen and minimax to resolve to qwen/qwen3.5-397b-a17b and minimax/minimax-m2.5, but the updated registry now maps those aliases to qwen/qwen3.6-plus and minimax/minimax-m2-7 (conf/openrouter_models.json). As written, test_alias_resolution will fail once dependencies are installed, and it also blocks the intended alias migration from being validated.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant